﻿Imports System.Data
Imports System.Data.SqlClient

Public Class FuncionariosDAL

    Sub New()

    End Sub

    Function inserir(ByVal nome As String, ByVal logradouro As String, ByVal complemento As String, ByVal numero As String, ByVal bairro As String,
                     ByVal cod_cidade As Integer, ByVal cep As String, ByVal tipo As Char, ByVal cargo As Integer, ByVal data_admissao As Date, ByVal salario As Double,
                     ByVal ch_semanal As Integer, ByVal cnh As String, ByVal telefone_fixo As String, ByVal celular As String, ByVal telefone_recado As String) As Integer
        Dim cmd As New SqlCommand
        Dim objD As New Dados
        Dim id As Integer
        Dim valid As Boolean
        Try
            valid = validarFunc(nome)
            If valid = False Then
                cmd.CommandText = "EXEC sp_Inserir_Funcionario @cf_codigo, @fun_data_admissao, @fun_salario, @fun_ch_semanal, @fun_ativo_sn," & _
                    "@pes_nome, @pes_logradouro, @pes_complemento, @pes_numero, @pes_bairro, @cod_cidade, @pes_cep, @telefone_fixo, @celular, @telefone_recado, @pes_tipo_fj, @mot_cnh"
                cmd.Parameters.Add(New SqlParameter("@pes_nome", SqlDbType.VarChar)).Value = nome
                cmd.Parameters.Add(New SqlParameter("@pes_logradouro", SqlDbType.VarChar)).Value = logradouro
                If complemento <> "" Then
                    cmd.Parameters.Add(New SqlParameter("@pes_complemento", SqlDbType.VarChar)).Value = complemento
                Else
                    cmd.Parameters.Add(New SqlParameter("@pes_complemento", SqlDbType.VarChar)).Value = DBNull.Value
                End If
                cmd.Parameters.Add(New SqlParameter("@pes_numero", SqlDbType.VarChar)).Value = numero
                cmd.Parameters.Add(New SqlParameter("@pes_bairro", SqlDbType.VarChar)).Value = bairro
                cmd.Parameters.Add(New SqlParameter("@cod_cidade", SqlDbType.Int)).Value = cod_cidade
                cmd.Parameters.Add(New SqlParameter("@pes_cep", SqlDbType.VarChar)).Value = cep
                cmd.Parameters.Add(New SqlParameter("@pes_tipo_fj", SqlDbType.Char)).Value = tipo
                cmd.Parameters.Add(New SqlParameter("@cf_codigo", SqlDbType.Int)).Value = cargo
                cmd.Parameters.Add(New SqlParameter("@fun_data_admissao", SqlDbType.Date)).Value = data_admissao
                cmd.Parameters.Add(New SqlParameter("@fun_salario", SqlDbType.Money)).Value = salario
                cmd.Parameters.Add(New SqlParameter("@fun_ch_semanal", SqlDbType.Int)).Value = ch_semanal
                cmd.Parameters.Add(New SqlParameter("@fun_ativo_sn", SqlDbType.Char)).Value = "S"
                If telefone_fixo <> "" Then
                    cmd.Parameters.Add(New SqlParameter("@telefone_fixo", SqlDbType.VarChar)).Value = telefone_fixo
                Else
                    cmd.Parameters.Add(New SqlParameter("@telefone_fixo", SqlDbType.VarChar)).Value = DBNull.Value
                End If
                If celular <> "" Then
                    cmd.Parameters.Add(New SqlParameter("@celular", SqlDbType.VarChar)).Value = celular
                Else
                    cmd.Parameters.Add(New SqlParameter("@celular", SqlDbType.VarChar)).Value = DBNull.Value
                End If
                If telefone_recado <> "" Then
                    cmd.Parameters.Add(New SqlParameter("@telefone_recado", SqlDbType.VarChar)).Value = telefone_recado
                Else
                    cmd.Parameters.Add(New SqlParameter("@telefone_recado", SqlDbType.VarChar)).Value = DBNull.Value
                End If
                If cnh <> "" Then
                    cmd.Parameters.Add(New SqlParameter("@mot_cnh", SqlDbType.VarChar)).Value = cnh
                Else
                    cmd.Parameters.Add(New SqlParameter("@mot_cnh", SqlDbType.VarChar)).Value = DBNull.Value
                End If
                id = objD.executacomandoAI(cmd, "funcionarios")
            Else
                Throw New Exception("Ja existe um funcionário com este nome!")
            End If

        Catch ex As Exception
            Throw ex
        End Try
        cmd = Nothing
        objD = Nothing
        Return id
    End Function

    Sub alterar(ByVal fun_codigo As Integer, ByVal nome As String, ByVal logradouro As String, ByVal complemento As String, ByVal numero As String, ByVal bairro As String,
                     ByVal cod_cidade As Integer, ByVal cep As String, ByVal tipo As Char, ByVal cargo As Integer, ByVal data_admissao As Date, ByVal salario As Double,
                     ByVal ch_semanal As Integer, ByVal cnh As String, ByVal telefone_fixo As String, ByVal celular As String, ByVal telefone_recado As String)
        Dim cmd As New SqlCommand
        Dim objD As New Dados
        Try
            cmd.CommandText = "EXEC sp_Alterar_Funcionario @fun_codigo, @cf_codigo, @fun_data_admissao, @fun_salario, @fun_ch_semanal, 'S', " & _
                "@pes_nome, @pes_logradouro, @pes_complemento, @pes_numero, @pes_bairro, @cod_cidade, @pes_cep, '', '', '', '', '', @telefone_fixo, @celular, @telefone_recado, @pes_tipo_fj, @mot_cnh"
            cmd.Parameters.Add(New SqlParameter("@fun_codigo", SqlDbType.Int)).Value = fun_codigo
            cmd.Parameters.Add(New SqlParameter("@pes_nome", SqlDbType.VarChar)).Value = nome
            cmd.Parameters.Add(New SqlParameter("@pes_logradouro", SqlDbType.VarChar)).Value = logradouro
            If complemento <> "" Then
                cmd.Parameters.Add(New SqlParameter("@pes_complemento", SqlDbType.VarChar)).Value = complemento
            Else
                cmd.Parameters.Add(New SqlParameter("@pes_complemento", SqlDbType.VarChar)).Value = DBNull.Value
            End If
            cmd.Parameters.Add(New SqlParameter("@pes_numero", SqlDbType.VarChar)).Value = numero
            cmd.Parameters.Add(New SqlParameter("@pes_bairro", SqlDbType.VarChar)).Value = bairro
            cmd.Parameters.Add(New SqlParameter("@cod_cidade", SqlDbType.Int)).Value = cod_cidade
            cmd.Parameters.Add(New SqlParameter("@pes_cep", SqlDbType.VarChar)).Value = cep
            cmd.Parameters.Add(New SqlParameter("@pes_tipo_fj", SqlDbType.Char)).Value = tipo
            cmd.Parameters.Add(New SqlParameter("@cf_codigo", SqlDbType.Int)).Value = cargo
            cmd.Parameters.Add(New SqlParameter("@fun_data_admissao", SqlDbType.Date)).Value = data_admissao
            cmd.Parameters.Add(New SqlParameter("@fun_salario", SqlDbType.Money)).Value = salario
            cmd.Parameters.Add(New SqlParameter("@fun_ch_semanal", SqlDbType.Int)).Value = ch_semanal
            If telefone_fixo <> "" Then
                cmd.Parameters.Add(New SqlParameter("@telefone_fixo", SqlDbType.VarChar)).Value = telefone_fixo
            Else
                cmd.Parameters.Add(New SqlParameter("@telefone_fixo", SqlDbType.VarChar)).Value = DBNull.Value
            End If
            If celular <> "" Then
                cmd.Parameters.Add(New SqlParameter("@celular", SqlDbType.VarChar)).Value = celular
            Else
                cmd.Parameters.Add(New SqlParameter("@celular", SqlDbType.VarChar)).Value = DBNull.Value
            End If
            If telefone_recado <> "" Then
                cmd.Parameters.Add(New SqlParameter("@telefone_recado", SqlDbType.VarChar)).Value = telefone_recado
            Else
                cmd.Parameters.Add(New SqlParameter("@telefone_recado", SqlDbType.VarChar)).Value = DBNull.Value
            End If
            If cnh <> "" Then
                cmd.Parameters.Add(New SqlParameter("@mot_cnh", SqlDbType.VarChar)).Value = cnh
            Else
                cmd.Parameters.Add(New SqlParameter("@mot_cnh", SqlDbType.VarChar)).Value = DBNull.Value
            End If
            objD.executacomando(cmd)
        Catch ex As Exception
            Throw ex
        End Try
        cmd = Nothing
        objD = Nothing
    End Sub

    Sub excluir(ByVal fun_codigo As Integer)
        Dim cmd As New SqlCommand
        Dim objD As New Dados
        Try
            cmd.CommandText = "update funcionarios set fun_ativo_sn = @fun_ativo_sn where fun_codigo = @fun_codigo"
            cmd.Parameters.Add(New SqlParameter("@fun_codigo", SqlDbType.Int)).Value = fun_codigo
            cmd.Parameters.Add(New SqlParameter("@fun_ativo_sn", SqlDbType.Char)).Value = "N"
            objD.executacomando(cmd)
        Catch ex As Exception
            Throw ex
        End Try
        cmd = Nothing
        objD = Nothing
    End Sub

    'Sub inserirTelefones(ByVal ddd As List(Of String), ByVal telefone As List(Of String), ByVal tipoTel As List(Of String), ByVal pessoa As Integer)
    '    Dim cmd As New SqlCommand
    '    Dim objD As New Dados
    '    Dim id As Integer
    '    Dim i As Integer
    '    Try
    '        For i = 0 To telefone.Count

    '            cmd.CommandText = "insert into telefones (tel_ddd, tel_numero, tel_tipo) values (@tel_ddd, @tel_numero, @tel_tipo)"
    '            cmd.Parameters.Add(New SqlParameter("@tel_ddd", SqlDbType.VarChar)).Value = ddd(i)
    '            cmd.Parameters.Add(New SqlParameter("@tel_numero", SqlDbType.VarChar)).Value = telefone(i)
    '            cmd.Parameters.Add(New SqlParameter("@tel_tipo", SqlDbType.VarChar)).Value = tipoTel(i)
    '            id = objD.executacomandoAI(cmd, "telefones")

    '            cmd.CommandText = "insert into telefones_da_pessoa (pes_codigo, tel_codigo) values (@pes_codigo, @tel_codigo)"
    '            cmd.Parameters.Add(New SqlParameter("@pes_codigo", SqlDbType.VarChar)).Value = pessoa
    '            cmd.Parameters.Add(New SqlParameter("@tel_codigo", SqlDbType.Int)).Value = id
    '            objD.executacomando(cmd)
    '        Next


    '    Catch ex As Exception
    '        Throw ex
    '    End Try
    '    cmd = Nothing
    '    objD = Nothing
    'End Sub

    Function validarFunc(ByVal nome As String) As Boolean
        Dim cmd As New SqlCommand
        Dim objD As New Dados
        Dim tab As DataTable
        Try
            cmd.CommandText = "select * from pessoa" & _
                " where pes_nome like @pes_nome and pes_codigo in (select pes_codigo from funcionarios)"
            cmd.Parameters.Add(New SqlParameter("@pes_nome", SqlDbType.VarChar)).Value = nome
            tab = objD.executaConsulta(cmd)
            If (tab.Rows.Count <> 0) Then
                Return True
            Else
                Return False
            End If
        Catch ex As Exception
            Throw ex
        End Try
        cmd = Nothing
        objD = Nothing
    End Function

    Function localizar(ByVal descricao As String, ByVal opcao As String) As DataTable
        Dim cmd As New SqlCommand
        Dim objD As New Dados
        Dim tab As DataTable = Nothing
        Try
            Select Case opcao
                Case "Nome"
                    cmd.CommandText = "select f.fun_codigo, p.pes_nome, p.pes_logradouro, p.pes_complemento, p.pes_numero, p.pes_bairro, c.nom_cidade, " & _
                " p.pes_cep, p.pes_telefone_fixo, p.pes_celular, p.pes_telefone_recado, cf.cf_codigo, cf.cf_descricao, f.fun_data_admissao, f.fun_salario, f.fun_ch_semanal," & _
                " f.fun_ativo_sn, f.pes_codigo, p.cod_cidade from funcionarios f, pessoa p, cargo_funcionario cf, cidade c" & _
                " where p.pes_codigo = f.pes_codigo and cf.cf_codigo = f.cf_codigo and p.pes_nome like @pes_nome and c.cod_cidade = p.cod_cidade order by p.pes_nome"
                    cmd.Parameters.Add(New SqlParameter("@pes_nome", SqlDbType.VarChar)).Value = descricao & "%"
                    tab = objD.executaConsulta(cmd)
                Case "Cargo"
                    cmd.CommandText = "select f.fun_codigo, p.pes_nome, p.pes_logradouro, p.pes_complemento, p.pes_numero, p.pes_bairro, c.nom_cidade, " & _
                " p.pes_cep, p.pes_telefone_fixo, p.pes_celular, p.pes_telefone_recado, cf.cf_codigo, cf.cf_descricao, f.fun_data_admissao, f.fun_salario, f.fun_ch_semanal," & _
                " f.fun_ativo_sn, f.pes_codigo, p.cod_cidade from funcionarios f, pessoa p, cargo_funcionario cf, cidade c" & _
                " where p.pes_codigo = f.pes_codigo and cf.cf_codigo = f.cf_codigo and cf.cf_descricao like @cf_descricao and c.cod_cidade = p.cod_cidade order by cf.cf_descricao, p.pes_nome"
                    cmd.Parameters.Add(New SqlParameter("@cf_descricao", SqlDbType.VarChar)).Value = "%" + descricao + "%"
                    tab = objD.executaConsulta(cmd)
                Case "Logradouro"
                    cmd.CommandText = "select f.fun_codigo, p.pes_nome, p.pes_logradouro, p.pes_complemento, p.pes_numero, p.pes_bairro, c.nom_cidade, " & _
                " p.pes_cep, p.pes_telefone_fixo, p.pes_celular, p.pes_telefone_recado, cf.cf_codigo, cf.cf_descricao, f.fun_data_admissao, f.fun_salario, f.fun_ch_semanal," & _
                " f.fun_ativo_sn, f.pes_codigo, p.cod_cidade from funcionarios f, pessoa p, cargo_funcionario cf, cidade c" & _
                " where p.pes_codigo = f.pes_codigo and cf.cf_codigo = f.cf_codigo and p.pes_logradouro like @pes_logradouro and c.cod_cidade = p.cod_cidade order by p.pes_logradouro, p.pes_nome"
                    cmd.Parameters.Add(New SqlParameter("@pes_logradouro", SqlDbType.VarChar)).Value = "%" + descricao + "%"
                    tab = objD.executaConsulta(cmd)
                Case "Salário"
                    cmd.CommandText = "select f.fun_codigo, p.pes_nome, p.pes_logradouro, p.pes_complemento, p.pes_numero, p.pes_bairro, c.nom_cidade, " & _
                " p.pes_cep, p.pes_telefone_fixo, p.pes_celular, p.pes_telefone_recado, cf.cf_codigo, cf.cf_descricao, f.fun_data_admissao, f.fun_salario, f.fun_ch_semanal," & _
                " f.fun_ativo_sn, f.pes_codigo, p.cod_cidade from funcionarios f, pessoa p, cargo_funcionario cf, cidade c" & _
                " where p.pes_codigo = f.pes_codigo and cf.cf_codigo = f.cf_codigo and f.fun_salario >= @fun_salario and c.cod_cidade = p.cod_cidade order by f.fun_salario, p.pes_nome"
                    If IsNumeric(descricao) Then
                        cmd.Parameters.Add(New SqlParameter("@fun_salario", SqlDbType.Money)).Value = Double.Parse(descricao)
                    Else
                        cmd.Parameters.Add(New SqlParameter("@fun_salario", SqlDbType.Money)).Value = 99999999
                    End If
                    tab = objD.executaConsulta(cmd)
                Case "Carga Horária"
                    cmd.CommandText = "select f.fun_codigo, p.pes_nome, p.pes_logradouro, p.pes_complemento, p.pes_numero, p.pes_bairro, c.nom_cidade, " & _
                " p.pes_cep, p.pes_telefone_fixo, p.pes_celular, p.pes_telefone_recado, cf.cf_codigo, cf.cf_descricao, f.fun_data_admissao, f.fun_salario, f.fun_ch_semanal," & _
                " f.fun_ativo_sn, f.pes_codigo, p.cod_cidade from funcionarios f, pessoa p, cargo_funcionario cf, cidade c" & _
                " where p.pes_codigo = f.pes_codigo and cf.cf_codigo = f.cf_codigo and f.fun_ch_semanal >= @fun_ch_semanal and c.cod_cidade = p.cod_cidade order by f.fun_ch_semanal, p.pes_nome"

                    If IsNumeric(descricao) Then
                        cmd.Parameters.Add(New SqlParameter("@fun_ch_semanal", SqlDbType.Int)).Value = Integer.Parse(descricao)
                    Else
                        cmd.Parameters.Add(New SqlParameter("@fun_ch_semanal", SqlDbType.Int)).Value = 0
                    End If
                    tab = objD.executaConsulta(cmd)
            End Select
        Catch ex As Exception
            Throw ex
        End Try
        cmd = Nothing
        objD = Nothing
        Return tab
        tab = Nothing
    End Function

    Function localizar(ByVal fun_codigo As Integer) As DataTable
        Dim cmd As New SqlCommand
        Dim objD As New Dados
        Dim tab As DataTable = Nothing
        Try
            cmd.CommandText = "select f.fun_codigo, p.pes_nome, p.pes_logradouro, p.pes_complemento, p.pes_numero, p.pes_bairro, c.nom_cidade, " & _
                " p.pes_cep, p.pes_telefone_fixo, p.pes_celular, p.pes_telefone_recado, cf.cf_codigo, cf.cf_descricao, f.fun_data_admissao, f.fun_salario, f.fun_ch_semanal," & _
                " f.fun_ativo_sn, f.pes_codigo, p.cod_cidade from funcionarios f, pessoa p, cargo_funcionario cf, cidade c " & _
                " where fun_codigo = @fun_codigo and p.pes_codigo = f.pes_codigo and cf.cf_codigo = f.cf_codigo and c.cod_cidade = p.cod_cidade"

            cmd.Parameters.Add(New SqlParameter("@fun_codigo", SqlDbType.Int)).Value = fun_codigo

            tab = objD.executaConsulta(cmd)

        Catch ex As Exception
            Throw ex
        End Try
        cmd = Nothing
        objD = Nothing
        Return tab
        tab = Nothing
    End Function

    'Function localizarTelefones(ByVal pessoa As Integer) As DataTable
    '    Dim cmd As New SqlCommand
    '    Dim objD As New Dados
    '    Dim tab As DataTable = Nothing
    '    Try
    '        cmd.CommandText = "select tel_ddd, tel_numero, tel_tipo from telefones where tel_codigo in " & _
    '                            "(select tel_codigo from telefones_da_pessoa where pes_codigo = @pessoa)"

    '        cmd.Parameters.Add(New SqlParameter("@pessoa", SqlDbType.Int)).Value = pessoa

    '        tab = objD.executaConsulta(cmd)
    '    Catch ex As Exception
    '        Throw ex
    '    End Try
    '    cmd = Nothing
    '    objD = Nothing
    '    Return tab
    '    tab = Nothing
    'End Function


    Function localizarCNH(ByVal fun_codigo As Integer) As DataTable
        Dim cmd As New SqlCommand
        Dim objD As New Dados
        Dim tab As DataTable = Nothing
        Try
            cmd.CommandText = "select * from motoristas where fun_codigo = @fun_codigo"

            cmd.Parameters.Add(New SqlParameter("@fun_codigo", SqlDbType.Int)).Value = fun_codigo

            tab = objD.executaConsulta(cmd)

        Catch ex As Exception
            Throw ex
        End Try
        cmd = Nothing
        objD = Nothing
        Return tab
        tab = Nothing
    End Function

    Function localizarProxAnterior(ByVal descricao As String, ByVal codigo As Integer) As DataTable
        Dim cmd As New SqlCommand
        Dim objD As New Dados
        Dim tab As DataTable = Nothing
        Try
            If (descricao = "proximo") Then
                cmd.CommandText = "select fun_codigo from funcionarios where fun_codigo = (select min(fun_codigo) from funcionarios where fun_codigo > @codigo and fun_ativo_sn <> 'N' )"

            ElseIf (descricao = "anterior") Then
                cmd.CommandText = "select fun_codigo from funcionarios where fun_codigo = (select max(fun_codigo) from funcionarios where fun_codigo < @codigo and fun_ativo_sn <> 'N' )"

            End If
            cmd.Parameters.Add(New SqlParameter("@codigo", SqlDbType.Int)).Value = codigo
            tab = objD.executaConsulta(cmd)

        Catch ex As Exception
            Throw ex
        End Try
        cmd = Nothing
        objD = Nothing
        Return tab
        tab = Nothing
    End Function

    Function localizarPrimeiroUltimo(ByVal opcao As String) As DataTable
        Dim cmd As New SqlCommand
        Dim objD As New Dados
        Dim tab As DataTable = Nothing
        Try
            If (opcao = "ultimo") Then
                cmd.CommandText = "select fun_codigo = max(fun_codigo) from funcionarios where fun_ativo_sn <> 'N' "
            ElseIf (opcao = "primeiro") Then
                cmd.CommandText = "select fun_codigo = min(fun_codigo) from funcionarios where fun_ativo_sn <> 'N' "
            End If
            tab = objD.executaConsulta(cmd)

        Catch ex As Exception
            Throw ex
        End Try
        cmd = Nothing
        objD = Nothing
        Return tab
        tab = Nothing
    End Function

End Class